前面學習了很多pandas的功能
在標籤的處理上還有資料的分析上也有進行介紹跟實際資料的演練
今天要練習的是更適用在真實應用場景的用法
關於日期與時間的處理
在時間序列的表達上
pandas內建也有可以將時間依照指定樣式顯示的方法
就可以省去另外寫好幾行程式碼的困擾
讓程式碼更簡潔有力
這裡同樣也是使用kaggle上的開源數據
利用不同的語法進行資料的操作
Kaggle: Your Machine Learning and Data Science Community
在日期與時間處理的部分
會使用到kaggle上這筆關於比特幣的資料
首先先看看這筆資料長怎樣
import pandas as pd
df = pd.read_csv("Bitcoin.csv")
df.head()
可以看到時間的排序是日期-月份-年份
但是這個要解讀起來很複雜
現在假如想讓時間排得更好看,
可以使用pandas的pd.to_datetime(),
要注意的是需要在括號裡放置想要轉換的時間欄位
pd.to_datetime(df.Date)
可以看到內建的功能將時間換成年份-日期-月份
看起來還是怪怪的,因為應該要把排列顯示出year-month-day
這時候就可以指定時間出現的形式,使用format指定
這時的形式是to_datetime(dateString,format)
現在來試試指定format針對時間進行調整
df["Date"] = pd.to_datetime(df["Date"], format="%d-%m-%Y")
df.head()
那先來看看整筆數據的相關描述性統計數據
可以看到整體數據有2965筆
是從2013/04/28開始到2021/06/09的所有紀錄
若是我只想要擷取從2020/01/01到最後一筆紀錄2021/06/09的資料時
有下列幾種方法
首先是使用dt.year.isin( )
括號內可以放置指定的條件
因為這個時間段是從去年第一天開始到資料的最後一筆
所以可以用年份下去處裡
df = df[df["Date"].dt.year.isin([2020,2021]).dropna()]
df
可以看到成功的將想要的時間擷取出來
rows的數量也從原本的2965變成擷取後的526
但這個處理的是以年計算
若是現在想要擷取更精確的時間段
第二個方法可以使用布林遮罩跟比較運算元
找出更精確的時間段
假設現在想要從2019/05/03到2020/12/27
df[(df['Date'] >= '2019-05-03') & (df['Date'] <= '2020-12-27')]
假如想要從2020/07/18到2021/04/25
可以先將Date欄位轉換為index
在使用loc[]
將想要的時間段slice出來
df = df.set_index("Date")
df
先將index轉換為時間
再將想要的時間段放到中括號的條件內
df.loc["2021-04-25":"2020-07-18"]
可以看到時間段成功擷取2020/07/18到2021/04/25